//package com.alibaba.cirtus.ots.application.app.ability.facade;
//
//import com.alibaba.cz.base.tool.log.Log;
//import com.alibaba.fastjson.JSONObject;
//import com.alibaba.lattice2.epoch.sdk.model.Result;
//import com.epoch.app.otsapplicationappsdk.planorderlist.dto.AsyncRequest;
//import com.epoch.app.otsapplicationappsdk.planorderlist.dto.RenderRequest;
//import com.epoch.app.otsapplicationappsdk.planorderlist.service.PlanOrderListService;
//import com.epoch.app.otsforecastsales.model.dto.PageQueryForecastRequest;
//import com.epoch.app.otsforecastsales.model.dto.QueryForecastListResponse;
//import com.epoch.app.otsforecastsales.otsforecastorderquery.service.OtsForecastOrderQueryService;
//import com.epoch.app.otsforecastsales.sdo.ForecastOrderSDO;
//import com.epoch.app.otsforecastsales.service.ApiService;
//import com.epoch.app.otsplatformenhance.model.dto.QueryEnumValuesRequest;
//import com.epoch.app.otsplatformenhance.service.OtsPlatformEnhanceService;
//import com.fasterxml.jackson.annotation.JsonProperty;
//import lombok.Data;
//import org.apache.commons.collections4.CollectionUtils;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.text.SimpleDateFormat;
//import java.util.*;
//
//@Service
//public class PlanOrderListServiceImpl implements PlanOrderListService {
//    public static final String PATTERN_DATE_TIME_MIDDLE_LINE = "yyyy.MM.dd";
//    public static final String PATTERN_DATE_TIME = "yyyy-MM-dd HH:mm:ss";
//
//    private static Log log = Log.getLogger(PlanOrderListServiceImpl.class);
//   /* @Autowired
//    @Qualifier("forecastOrderQueryServiceImpl")
//    private ForecastOrderQueryService forecastOrderQueryService;*/
//
//    @Autowired
//    private OtsPlatformEnhanceService otsPlatformEnhanceService;
//    @Autowired
//    private ApiService apiService;
//
//    @Autowired
//    private OtsForecastOrderQueryService orderQueryService;
//
//    @Override
//    public Object render(RenderRequest renderRequest) {
//        PageQueryForecastRequest pageQueryForecastRequest = new PageQueryForecastRequest();
//        //BeanUtils.copyProperties(renderRequest,pageQueryForecastLineRequest);
//        if (null == renderRequest.getCurrentPage()) {
//            renderRequest.setCurrentPage(1);
//        }
//
//        if (null == renderRequest.getSize()) {
//            renderRequest.setSize(10);
//        }
//        Integer currentPage = renderRequest.getCurrentPage();
//        Integer size = renderRequest.getSize();
//        Integer start = (currentPage - 1) * size;
//        pageQueryForecastRequest.setLimit(size);
//        pageQueryForecastRequest.setStart(start);
//        List<Integer> statusList = Arrays.asList(1, 2, 3,4,120);
//        pageQueryForecastRequest.setMainStatusList(statusList);
//        // todo 等待后端接口增加statusList的入参
//       // List<Integer> statusList = renderRequest.getStatusList();
//        pageQueryForecastRequest.setMainStatusList(statusList);
//
//        log.info("render of planOrder query input request {}", JSONObject.toJSONString(pageQueryForecastRequest));
//       // Result<List<ForecastOrderSDO>> listResult = orderQueryService.queryForecastOrderList(pageQueryForecastRequest);
//        QueryForecastListResponse listResult = apiService.queryForecastList(pageQueryForecastRequest);
//
//        log.info("----"+JSONObject.toJSONString(listResult));
//        //单据类型
//        List<Info> orderTypeList = JSONObject.parseObject(JSONObject.parseObject(JSONObject.toJSONString(otsPlatformEnhanceService.queryEnumValues(new QueryEnumValuesRequest() {{
//            setCode("forecastTag");
//        }}))).getString("result"), List.class);
//
//        Map<String, Object> backs = new HashMap<>();
//        backs.put("list", listResult.getResult());
//        backs.put("total", new Double(Math.ceil((double) listResult.getTotal() / size)).intValue());
//        backs.put("page", currentPage);
//        backs.put("size", size);
//        backs.put("planOrderTypeList", Objects.isNull(orderTypeList) ? new ArrayList<>() : orderTypeList);
//
//        return Result.success(backs);
//    }
//
//    @Override
//    public Object async(AsyncRequest asyncRequest) {
//        log.info(JSONObject.toJSONString(asyncRequest));
//        //筛选条件
//        List<String> gmtCreate=new ArrayList<>();
//        List<String> orderType = new ArrayList<>();
//
//        //下拉选中
//        String address = null;
//        String customer = null;
//
//        //输入的单号
//        String orderId = null;
//
//        //分页参数
//        Integer currentPage = 1;
//        Integer pageSize = 10;
//
//        //TAB页切换
//        Integer status = null;
//
//        JSONObject requestInput = JSONObject.parseObject(JSONObject.toJSONString(asyncRequest.getRequestInput())).getJSONObject("fields").getJSONObject("otherFields");
//        log.info(JSONObject.toJSONString(asyncRequest.getRequestInput()));
//
//        //筛选条件 日期筛选和单据类型筛选
//        if (Objects.nonNull(requestInput.getJSONObject("filterOptions"))) {
//            List<Group> groups = requestInput.getJSONObject("filterOptions").getJSONArray("group").toJavaList(Group.class);
//            for (Group group : groups) {
//                if ("date".equalsIgnoreCase(group.getType())) {
//                    List<DataSource> dataSource = group.getDataSource();
//                    for (DataSource source : dataSource) {
//                        if ("startTime".equalsIgnoreCase(source.getKey())) {
//                            gmtCreate.add(0,getStringDate(source.getValue()));
//                        }
//                        if ("endTime".equalsIgnoreCase(source.getKey())) {
//                            gmtCreate.add(getStringDate((Objects.nonNull(source.getValue())&&StringUtils.isNotBlank(source.getValue()))?String.valueOf(Long.valueOf(source.getValue())+86399999l):""));
//                        }
//                    }
//
//                }
//
//                if ("tag".equalsIgnoreCase(group.getType())) {
//
//                    List<DataSource> dataSource = group.getDataSource();
//                    for (DataSource source : dataSource) {
//                        if (source.getSelected() && !"ALL".equalsIgnoreCase(source.getValue())) {
//                            orderType.add(source.getValue());
//                        }
//                    }
//
//                }
//
//            }
//        }
//        //判断客户或者地址是否被选中
//        if (Objects.nonNull(requestInput.getJSONArray("selectOptions"))) {
//            List<Group> selectOptions = requestInput.getJSONArray("selectOptions").toJavaList(Group.class);
//            for (Group selectOption : selectOptions) {
//                if ("address".equalsIgnoreCase(selectOption.getKey())) {
//                    JSONObject selected = selectOption.getSelected();
//                    if (Objects.nonNull(selected)) {
//                        address = selected.getString("addressCode");
//                    }
//
//                }
//                if ("customer".equalsIgnoreCase(selectOption.getKey())) {
//                    JSONObject selected = selectOption.getSelected();
//                    if (Objects.nonNull(selected)) {
//                        customer = selected.getString("code");
//                    }
//
//                }
//            }
//        }
//
//        //订单id
//        if (Objects.nonNull(requestInput.getString("orderId")))
//            orderId = requestInput.getString("orderId");
//
//
//        //分页
//        if (Objects.nonNull(requestInput.getInteger("currentPage")))
//            currentPage = requestInput.getInteger("currentPage");
//
//        if (Objects.nonNull(requestInput.getInteger("pageSize")))
//            pageSize = requestInput.getInteger("pageSize");
//
//        //切换tab
//        if (Objects.nonNull(requestInput.getInteger("status")) && 0 != requestInput.getInteger("status"))
//            status = requestInput.getInteger("status");
//
//
//        Integer start = (currentPage - 1) * pageSize;
//        PageQueryForecastRequest pageQueryForecastRequest = new PageQueryForecastRequest();
//        pageQueryForecastRequest.setLimit(pageSize);
//        pageQueryForecastRequest.setStart(start);
//
//        //
//        if (Objects.nonNull(status) && 0 != status) {
//            pageQueryForecastRequest.setMainStatusList(Arrays.asList(status));
//        } else {
//            List<Integer> statusList = Arrays.asList(1, 2, 3,4,120);
//            status = 0;
//            pageQueryForecastRequest.setMainStatusList(statusList);
//        }
//
//        if (StringUtils.isNotBlank(address)) {
//            pageQueryForecastRequest.setReceiveAddressCode(address);
//        }
//
//        if (CollectionUtils.isNotEmpty(orderType)) {
//            pageQueryForecastRequest.setOrderTypeList(orderType);
//        }
//
//        if (StringUtils.isNotBlank(orderId)) {
//            pageQueryForecastRequest.setOrderBizId(orderId);
//        }
//
//        if (StringUtils.isNotBlank(customer)) {
//            pageQueryForecastRequest.setCustomerCode(customer);
//        }
//
//
//        if (Objects.nonNull(gmtCreate)&&CollectionUtils.isNotEmpty(gmtCreate)) {
//            pageQueryForecastRequest.setGmtCreate(gmtCreate);
//        }
//
//        log.info("async pageQueryForecastRequest:"+JSONObject.toJSONString(pageQueryForecastRequest));
//       // Result<List<ForecastOrderSDO>> listResult = orderQueryService.queryForecastOrderList(pageQueryForecastRequest);
//        QueryForecastListResponse listResult = apiService.queryForecastList(pageQueryForecastRequest);
//        //单据类型
//        List<Info> orderTypeList = JSONObject.parseObject(JSONObject.parseObject(JSONObject.toJSONString(otsPlatformEnhanceService.queryEnumValues(new QueryEnumValuesRequest() {{
//            setCode("forecastTag");
//        }}))).getString("result"), List.class);
//
//        Map<String, Object> backs = new HashMap<>();
//        backs.put("status", status);
//        backs.put("list", listResult.getResult());
//        backs.put("total", new Double(Math.ceil((double) listResult.getTotal() / pageSize)).intValue());
//        backs.put("page", currentPage);
//        if (currentPage > 1) {
//            backs.put("reload", false);
//        } else {
//            backs.put("reload", true);
//        }
//        backs.put("size", pageSize);
//        backs.put("planOrderTypeList", Objects.isNull(orderTypeList) ? new ArrayList<>() : orderTypeList);
//
//        log.info(JSONObject.toJSONString(backs));
//        return Result.success(backs);
//    }
//
//    private String getStringDate(String timestamp){
//
//        if (StringUtils.isBlank(timestamp)){
//            return null;
//        }
//        Date date = new Date(Long.valueOf(timestamp));
//        SimpleDateFormat simpleDateFormat=new SimpleDateFormat(PATTERN_DATE_TIME);
//        String format = simpleDateFormat.format(date);
//
//        return format;
//    }
//
//    @Data
//    static class Group {
//        @JsonProperty("type")
//        public String type;
//
//        @JsonProperty("title")
//        public String title;
//
//        @JsonProperty("placeholder")
//        public String placeholder;
//
//        @JsonProperty("key")
//        public String key;
//
//        @JsonProperty("selected")
//        public JSONObject selected;
//
//
//        @JsonProperty("fetchUrl")
//        public String fetchUrl;
//
//        @JsonProperty("dataSource")
//        public List<DataSource> dataSource;
//
//
//    }
//
//    @Data
//    static class SelectOption {
//        @JsonProperty("type")
//        public String type;
//
//        @JsonProperty("title")
//        public String title;
//
//        @JsonProperty("placeholder")
//        public String placeholder;
//
//        @JsonProperty("dataSource")
//        public List<DataSource> dataSource;
//
//    }
//
//    @Data
//    static class DataSource {
//        @JsonProperty("label")
//        public String label;
//
//        @JsonProperty("key")
//        public String key;
//
//        @JsonProperty("value")
//        public String value;
//
//        @JsonProperty("selected")
//        public Boolean selected;
//
//    }
//    @Data
//    public static class Info{
//        private String label;
//        private String value;
//    }
//}
